/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package View;

import Dao.AtividadeDao;
import Dao.HistoricoDao;
import Dao.HistoricoDaoImplJPA;
import Dao.HistoricoTurmaDao;
import Dao.HistoricoTurmaDaoImplJPA;
import Pojo.Aluno;
import Pojo.Historico;
import Pojo.HistoricoTurma;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.Color;
import java.awt.Font;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author thiago
 */
public class GerarHistorico {
    
    /** permissão de acesso */
    private int acesso;
    
    /** permissão de acesso de aluno*/
    private Aluno alunoAcesso;
    
    private static com.itextpdf.text.Font fontePadrao = FontFactory.getFont(FontFactory.COURIER, 12, Font.BOLD);
    
    private static com.itextpdf.text.Font fonteSecao = FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD);

    /**
     * getter de acesso
     * @return 
     */
    public int getAcesso() {
        return acesso;
    }

    /**
     * setter de acesso
     * @param acesso 
     */
    public void setAcesso(int acesso) {
        this.acesso = acesso;
    }

    /**
     * getter de acesso
     * @return 
     */
    public Aluno getAlunoAcesso() {
        return alunoAcesso;
    }

    /**
     * setter de acesso
     * @param alunoAcesso 
     */
    public void setAlunoAcesso(Aluno alunoAcesso) {
        this.alunoAcesso = alunoAcesso;
    }

    
    public GerarHistorico(int acesso, Aluno alunoAcesso) {
        this.setAcesso(acesso);
        this.setAlunoAcesso(alunoAcesso);
    }
    
    public void gerarHistorico() throws DocumentException, FileNotFoundException, BadElementException, MalformedURLException, IOException{
        
        //Declarando os Daos
        HistoricoDao historicoDao = new HistoricoDaoImplJPA();
        
        //Criando o documento(base no modelo da ufsj)
        Document documento = new Document(PageSize.A4, 50, 50, 50, 50);
        
        //Criando o writer do pdf
        PdfWriter writer = PdfWriter.getInstance(documento, new FileOutputStream("Histórico_"+this.getAlunoAcesso().getNome()+".pdf"));
             
        //abrindo o documento
        documento.open();
        
        //Colocando Logo
        Image img = Image.getInstance("ufln_pretobranco.png");
        img.setAlignment(Element.ALIGN_LEFT | Image.TEXTWRAP);
        img.scalePercent(50f);
        documento.add(img);
        
        //Adicionando Título
        Paragraph paragrafo = new Paragraph("Universidade Federal de Lugar Nenhum",FontFactory.getFont(FontFactory.COURIER, 18, Font.BOLD));
        paragrafo.setAlignment(Element.ALIGN_CENTER);
        documento.add(paragrafo);
                
        //Adicionando SubTítulo
        paragrafo = new Paragraph("Histórico Escolar",FontFactory.getFont(FontFactory.COURIER, 16, Font.BOLD));
        paragrafo.setAlignment(Element.ALIGN_CENTER);
        documento.add(paragrafo);
        documento.add(new Paragraph("\n\n__________________________________________________________________________"));
        documento.add(new Paragraph("\n"));
        
        //Adicionando Dados do Aluno
        paragrafo = new Paragraph("Identificação do Aluno",fonteSecao);
        documento.add(paragrafo);
        paragrafo = new Paragraph("Código: "+this.getAlunoAcesso().getId(),fontePadrao);
        documento.add(paragrafo);
        paragrafo = new Paragraph("Nome:   "+this.getAlunoAcesso().getNome(),fontePadrao);
        documento.add(paragrafo);
        paragrafo = new Paragraph("CPF:    "+this.getAlunoAcesso().getCpf(),fontePadrao);
        documento.add(paragrafo);
        
        //Buscando dados do Histórico do aluno
        List<Historico> listaHistoricos = historicoDao.pesquisarPorAluno(this.getAlunoAcesso());

        //Gerando tabelas
        PdfPTable table = new PdfPTable(new float[] { 0.2f, 1.0f, 0.2f, 0.2f, 0.2f });
        
        PdfPCell c1 = new PdfPCell(new Phrase("Código"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("Disciplina"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("C.H."));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);
        
        c1 = new PdfPCell(new Phrase("Faltas"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);
        
        c1 = new PdfPCell(new Phrase("Nota"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);
        
        table.setHeaderRows(1);
                
        //calculando informações do aluno
        int qtdDisciplinas = 0;
        String historicoString;
        for (Historico historico : listaHistoricos){
            qtdDisciplinas++;
            table.addCell(String.valueOf(historico.getDisciplina().getId()));
            table.addCell(historico.getDisciplina().getNome());
            table.addCell(String.valueOf(historico.getDisciplina().getCargaHoraria()));
            table.addCell(String.valueOf(historico.getNumeroDeFaltas()));
            table.addCell(String.valueOf(historico.getNotaFinal()));
        }
        
        documento.add(new Paragraph("Quantidade de Disciplinas cursadas: "+qtdDisciplinas,fontePadrao));
        
        documento.add(new Paragraph("\n__________________________________________________________________________"));
        documento.add(new Paragraph("Histórico do Aluno",fonteSecao));
        documento.add(new Paragraph("\n"));
        
        documento.add(table);
        
        documento.close();
    }
    
    
    public void gerarHistoricoTurma() throws DocumentException, FileNotFoundException, BadElementException, MalformedURLException, MalformedURLException, IOException{
        
        //Declarando os Daos
        HistoricoTurmaDao historicoTurmaDao = new HistoricoTurmaDaoImplJPA();
        
        //Criando o documento(base no modelo da ufsj)
        Document documento = new Document(PageSize.A4, 50, 50, 50, 50);
        
        //Criando o writer do pdf
        PdfWriter writer = PdfWriter.getInstance(documento, new FileOutputStream("Extrato_"+this.getAlunoAcesso().getNome()+".pdf"));
             
        //abrindo o documento
        documento.open();
        
        //Colocando Logo
        Image img = Image.getInstance("ufln_pretobranco.png");
        img.setAlignment(Element.ALIGN_LEFT | Image.TEXTWRAP);
        img.scalePercent(50f);
        documento.add(img);
        
        //Adicionando Título
        Paragraph paragrafo = new Paragraph("Universidade Federal de Lugar Nenhum",FontFactory.getFont(FontFactory.COURIER, 18, Font.BOLD));
        paragrafo.setAlignment(Element.ALIGN_CENTER);
        documento.add(paragrafo);
                
        //Adicionando SubTítulo
        paragrafo = new Paragraph("Extrato Escolar",FontFactory.getFont(FontFactory.COURIER, 16, Font.BOLD));
        paragrafo.setAlignment(Element.ALIGN_CENTER);
        documento.add(paragrafo);
        documento.add(new Paragraph("\n\n__________________________________________________________________________"));
        documento.add(new Paragraph("\n"));
        
        //Adicionando Dados do Aluno
        paragrafo = new Paragraph("Identificação do Aluno",fonteSecao);
        documento.add(paragrafo);
        paragrafo = new Paragraph("Código: "+this.getAlunoAcesso().getId(),fontePadrao);
        documento.add(paragrafo);
        paragrafo = new Paragraph("Nome:   "+this.getAlunoAcesso().getNome(),fontePadrao);
        documento.add(paragrafo);
        paragrafo = new Paragraph("CPF:    "+this.getAlunoAcesso().getCpf(),fontePadrao);
        documento.add(paragrafo);
        
        //Buscando dados do Histórico do aluno
        List<HistoricoTurma> listaHistoricos = historicoTurmaDao.pesquisarPorAluno(this.getAlunoAcesso());
        
         //Gerando tabelas
        PdfPTable table = new PdfPTable(new float[] { 0.25f, 1.0f, 0.2f, 0.2f, 0.2f, 0.15f });
        
        PdfPCell c1 = new PdfPCell(new Phrase("Código"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("Disciplina"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("C.H."));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);
        
        c1 = new PdfPCell(new Phrase("Faltas"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);
        
        c1 = new PdfPCell(new Phrase("Nota"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);
        
        c1 = new PdfPCell(new Phrase("Apr."));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);
        
        //calculando informações do aluno
        int qtdTurmas = 0;
        double somatorioCargaHoraria = 0;
        for (HistoricoTurma historicoTurma : listaHistoricos){
            qtdTurmas++;
            somatorioCargaHoraria += historicoTurma.getTurma().getDisciplina().getCargaHoraria();
            table.addCell(String.valueOf(historicoTurma.getTurma().getDisciplina().getId()));
            table.addCell(historicoTurma.getTurma().getDisciplina().getNome());
            table.addCell(String.valueOf(historicoTurma.getTurma().getDisciplina().getCargaHoraria()));
            table.addCell(String.valueOf(historicoTurma.getNumeroDeFaltas()));
            table.addCell(String.valueOf(historicoTurma.getNota()));
            if (historicoTurma.isAprovado()){
                table.addCell("S");
            }else{
                table.addCell("N");
            }
        }
        
        documento.add(new Paragraph("Quantidade de Turmas cursadas: "+qtdTurmas,fontePadrao));
        documento.add(new Paragraph("Carga horária total cursada: "+somatorioCargaHoraria,fontePadrao));
        
        documento.add(new Paragraph("\n__________________________________________________________________________"));
        documento.add(new Paragraph("Histórico das Turmas do Aluno",fonteSecao));
        documento.add(new Paragraph("\n"));
        
        documento.add(table);
        
        documento.close();
    }
}
